bitkeeper revision 1.1389.5.30 (427c951f6ULpkuxG36TskUioGnRY9w)
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Sat, 7 May 2005 10:14:55 +0000 (10:14 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Sat, 7 May 2005 10:14:55 +0000 (10:14 +0000)
x86_64 gcc sometimes doesn't have builtin memmove. Always use the
version we provide.
Signed-off-by: Keir Fraser <keir@xensource.com>
xen/arch/x86/string.c
xen/include/asm-x86/x86_64/string.h

index b45a9197d5a8782193524f5b5998f02fff69fd21..745670b92622bcad474aecd30355c2cec248de5b 100644 (file)
@@ -8,25 +8,6 @@
 #include <xen/config.h>
 #include <xen/lib.h>
 
-#undef memmove
-void *memmove(void *dest, const void *src, size_t n)
-{
-    int d0, d1, d2;
-    if ( dest < src )
-        return memcpy(dest, src, n);
-
-    __asm__ __volatile__ (
-        "   std         ; "
-        "   rep ; movsb ; "
-        "   cld           "
-        : "=&c" (d0), "=&S" (d1), "=&D" (d2)
-        : "0" (n), "1" (n-1+(const char *)src), "2" (n-1+(char *)dest)
-        : "memory");
-
-    return dest;
-}
-
 #undef memcpy
 void *memcpy(void *dest, const void *src, size_t n)
 {
@@ -61,3 +42,22 @@ void *memset(void *s, int c, size_t n)
 
     return s;
 }
+
+#undef memmove
+void *memmove(void *dest, const void *src, size_t n)
+{
+    int d0, d1, d2;
+    if ( dest < src )
+        return memcpy(dest, src, n);
+
+    __asm__ __volatile__ (
+        "   std         ; "
+        "   rep ; movsb ; "
+        "   cld           "
+        : "=&c" (d0), "=&S" (d1), "=&D" (d2)
+        : "0" (n), "1" (n-1+(const char *)src), "2" (n-1+(char *)dest)
+        : "memory");
+
+    return dest;
+}
index 6c1cc902f9e373045d662abddf9efed77f58e901..613c98271810baed203f1bedef45062819e47aea 100644 (file)
@@ -1,10 +1,6 @@
 #ifndef _X86_64_STRING_H_
 #define _X86_64_STRING_H_
 
-#define __HAVE_ARCH_MEMMOVE
-#define memmove(dest,src,n) (__memmove((dest),(src),(n)))
-#define __memmove(dest,src,n) (__builtin_memmove((dest),(src),(n)))
-
 #define __HAVE_ARCH_MEMCPY
 #define memcpy(t,f,n) (__memcpy((t),(f),(n)))
 #define __memcpy(t,f,n) (__builtin_memcpy((t),(f),(n)))
@@ -13,4 +9,8 @@
 #define memset(s, c, count) (__memset((s),(c),(count)))
 #define __memset(s, c, count) (__builtin_memset((s),(c),(count)))
 
+/* Some versions of 64-bit gcc don't have this built in. */
+#define __HAVE_ARCH_MEMMOVE
+extern void *memmove(void *dest, const void *src, size_t n);
+
 #endif